<?php

App::uses('Shell', 'Console');
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');

class LeiturasShell extends AppShell {
	public $tasks = array('LeituraHS01', 'LeituraHS02', 'LeituraM02');
    public $uses = array('Estacao');

    public function main() {
        $this->readFiles($this->args[0]);
    }

    private function loadFile($fileName, $content) {
        $estacao = $this->getEstacao($fileName);

        if ($estacao == null) {
            $this->out('Nao foi encontrado estacao para '.$fileName);
            return;
        }

        $parser = $this->getParser($estacao['tipo']);

        if ($parser == null) {
            $this->out('Nao foi encontrado parser tipo '.$estacao['tipo']);
            return;
        }

        $parser->setEstacaoId($estacao['id']);
        $parser->setContent($content);
        $parser->execute();
    }

    private function readFiles($folder) {
        $dir = new Folder($folder);
        $files = $dir->find('.*\.txt');

        foreach ($files as $file) {
            $file = new File($dir->pwd() . DS . $file);
            $contents = $file->read();
            
            $this->loadFile($file->name, $contents);
            $file->close();
        }
    }

    private function getEstacao($fileName) {
        $estacoes = $this->Estacao->find('all');

        foreach ($estacoes as $estacao) {
            $baseName = $estacao['Estacao']['nome_arquivo'];

            if (strpos($fileName,$baseName) !== false) {
                return $estacao['Estacao'];
            }
        }

        return null;
    }

    private function getParser($tipo) {
        $parsers = Configure::read('Parsers');
        
    	if ($parsers[$tipo] == 'HS01')
    		return $this->LeituraHS01;
    	else if ($parsers[$tipo] == 'HS02')
    		return $this->LeituraHS02;
        else if ($parsers[$tipo] == 'M02')
            return $this->LeituraM02;
    	else
    		return null;
    }
}